FIO Records 2015

Input data

Both FIO Records 2015 1 & 2 were merged together.

setwd("~/R Data Files") 
FIO15 <- read.csv('FIO Records 2015 (New RMS) - FieldContact_Name Table.csv')
FIO15_2 <- read.csv('FIO Records 2015 (New RMS) - FieldContact Table.csv')
FIO15_Records = merge(FIO15, FIO15_2, by = 'fc_num',all = TRUE)
head(FIO15_Records)

Look for NA’s & Missing Data

summary(FIO15_Records)
        fc_num          recnum                          contact_date.x                          sex                                              race     
 F150008950:   12   Min.   :1e+08   2015-07-23 22:30:00.0000000:   62                             :   22                                           :  22  
 F160012088:   12   1st Qu.:1e+08   2015-06-11 18:26:00.0000000:   30   Female                    :  959   Asian                                   :  56  
 F150010428:   10   Median :1e+08   2015-09-07 06:45:00.0000000:   22   Male                      :10980   Black                                   :8521  
 F150008600:    9   Mean   :1e+08   2015-07-23 19:26:00.0000000:   14   Transgender Female to Male:    1   Native American / Alaskan Native        :  16  
 F150011337:    9   3rd Qu.:1e+08   2015-06-26 17:52:00.0000000:   13   Transgender Male to Female:    5   Native Hawaiian / Other Pacific Islander:   5  
 F150004108:    8   Max.   :1e+08   2015-07-07 19:00:00.0000000:   13   Unknown                   :   22   Unknown                                 : 915  
 (Other)   :11929   NA's   :22      (Other)                    :11835                                      White                                   :2454  
      age               build         hair_style          complexion                    ethnicity                      otherclothing                      contact_date.y 
 Min.   :-1778.00          :4626           :8361   Medium      :3427                         :7769                            :2081   2015-07-23 22:30:00.0000000:   62  
 1st Qu.:   21.00   Medium :3322   Short   :2017               :2477   Hispanic Origin       : 810   WHITE TSHIRT, BLUE JEANS :  72   2015-06-11 18:26:00.0000000:   30  
 Median :   25.00   Thin   :1342   Braids  : 570   Light       :1823   Not of Hispanic Origin:3026   BLACK HOODIE, BLUE JEANS :  37   2015-09-07 06:45:00.0000000:   22  
 Mean   :   27.28   Small  :1249   Long    : 369   Dark        :1243   Unknown               : 384   WHITE T-SHIRT, BLUE JEANS:  35   2015-07-23 19:26:00.0000000:   14  
 3rd Qu.:   31.75   Heavy  : 619   Bald    : 190   Medium Brown:1203                                 BLACK JACKET, BLUE JEANS :  33   2015-06-26 17:52:00.0000000:   13  
 Max.   :  353.00   Stocky : 330   Straight: 156   Dark Brown  : 700                                 BLACK SHIRT, BLUE JEANS  :  30   2015-07-07 19:00:00.0000000:   13  
 NA's   :287        (Other): 501   (Other) : 326   (Other)     :1116                                 (Other)                  :9701   (Other)                    :11835  
 contact_officer       contact_officer_name   supervisor           supervisor_name              streetaddr               city       state           zip       frisked 
 092675 : 557    DERVAN,EDWARD P.: 557      Min.   : 7329   HYNES, JOHN    :1998   618 SHAWMUT AVE   :  166   BSTN         :10091     :  302   02119  :1784    :8410  
 011817 : 462    EZEKIEL,JASON M : 398      1st Qu.:10132   JONES, KEVIN   :1132   75 BOYLSTON ST    :   85   ROXBURY      :  440   MA:11676   02121  :1413   Y:3579  
 107106 : 374    O'LOUGHLIN,JAMES: 337      Median :11612   COGAVIN, DENNIS:1081   609 SHAWMUT AVE   :   74   BOSTON       :  410   ME:   10   02124  :1224           
        : 317                    : 317      Mean   :24101   BICKERTON, DEAN: 641   279 CENTRE ST     :   73   DORCHESTER   :  371   NY:    1   02118  : 808           
 102400 : 307    KELLY,BRENDAN W.: 307      3rd Qu.:11756   RYAN, GARY     : 581   124 EUSTIS ST     :   60                :  330                     : 805           
 050576 : 201    BUIEL,JOSEPH    : 193      Max.   :99724   VICKERS, MARK  : 533   70 ANNUNCIATION RD:   53   JAMAICA PLAIN:   73              02125  : 774           
 (Other):9771    (Other)         :9880                      (Other)        :6023   (Other)           :11478   (Other)      :  274              (Other):5181           
 searchperson searchvehicle summonsissued                       stop_duration       circumstance                   basis       vehicle_year  vehicle_state 
  :10186       :10889        :11612                                    :5880   Encountered:2502   Encounter           :2012   Min.   :   0          :7720  
 Y: 1803      Y: 1100       Y:  377       Five to Ten Minutes          :2624   Observed   :3829   Intel               :1338   1st Qu.:2002   MA     :3802  
                                          Ten to Fifteen Minutes       :1020   Stopped    :5658   Probable Cause      :4814   Median :2006   ME     :  86  
                                          Less Than Five Minutes       : 926                      Reasonable Suspicion:3825   Mean   :1994   NY     :  61  
                                          Fifteen to Twenty Minutes    : 841                                                  3rd Qu.:2013   RI     :  49  
                                          Twenty-Five to Thirty Minutes: 221                                                  Max.   :2105   NH     :  39  
                                          (Other)                      : 477                                                  NA's   :8130   (Other): 232  
    vehicle_make  vehicle_model  vehicle_color        vehicle_style              vehicle_type                               contact_reason 
          :9336          :9336          :7822                :9266                     :9077                                       :  576  
 HONDA    : 425   OTHER  : 327   GRAY   :1226   PASSENGER CAR:2686   Sedan             :2112   PROBATION CHECK                     :  122  
 NISSAN   : 343   ACCORD : 259   BLACK  : 966   PICKUP       :  37   SUV or Utility Van: 489   TRAFFIC STOP                        :   85  
 TOYOTA   : 258   ALTIMA : 176   WHITE  : 557                        Compact           : 101   INVESTIGATIVE OPERATION             :   78  
 FORD     : 243   CIVIC  : 140   BLUE   : 451                        Station Wagon     :  60   VALS                                :   67  
 CHEVROLET: 179   CAMRY  : 127   RED    : 339                        Other             :  55   GANG INVESTIGATION\nFIREARM RECOVERY:   64  
 (Other)  :1205   (Other):1624   (Other): 628                        (Other)           :  95   (Other)                             :10997  
str(FIO15_Records)
'data.frame':   11989 obs. of  35 variables:
 $ fc_num              : Factor w/ 9203 levels "F150003405","F150003407",..: 1 1 2 2 2 2 3 4 4 4 ...
 $ recnum              : int  100003165 100003164 100002605 100002608 100002606 100002607 100002633 100002621 100002622 100002623 ...
 $ contact_date.x      : Factor w/ 6911 levels "0217-04-17 12:30:00.0000000",..: 699 699 701 701 701 701 702 706 706 706 ...
 $ sex                 : Factor w/ 6 levels "","Female","Male",..: 2 3 3 3 3 3 3 3 3 3 ...
 $ race                : Factor w/ 7 levels "","Asian","Black",..: 3 3 3 3 3 3 3 3 3 7 ...
 $ age                 : int  52 20 23 26 22 29 37 25 27 39 ...
 $ build               : Factor w/ 10 levels "","Average","Heavy",..: 4 4 8 1 9 1 9 4 9 9 ...
 $ hair_style          : Factor w/ 10 levels "","Afro","Bald",..: 9 8 8 1 4 1 8 5 1 6 ...
 $ complexion          : Factor w/ 15 levels "","Albino","Black",..: 12 12 10 1 9 1 10 4 5 7 ...
 $ ethnicity           : Factor w/ 4 levels "","Hispanic Origin",..: 3 3 1 1 1 1 3 1 1 1 ...
 $ otherclothing       : Factor w/ 8246 levels "","\"85\" PATRIOTS JERSEY & CAMOU PANTS",..: 4750 2827 7192 1 5588 1 7571 1395 6327 1 ...
 $ contact_date.y      : Factor w/ 6911 levels "0217-04-17 12:30:00.0000000",..: 699 699 701 701 701 701 702 706 706 706 ...
 $ contact_officer     : Factor w/ 648 levels "","001521","001551",..: 354 354 570 570 570 570 208 193 193 193 ...
 $ contact_officer_name: Factor w/ 813 levels "","ABRAHAMSON,PATRICK OLAF",..: 410 410 702 702 702 702 386 753 753 753 ...
 $ supervisor          : int  11756 11756 11359 11359 11359 11359 11312 9795 9795 9795 ...
 $ supervisor_name     : Factor w/ 168 levels "ASSAD, MARK",..: 54 54 137 137 137 137 57 122 122 122 ...
 $ streetaddr          : Factor w/ 4801 levels "0  MYSTIC ST",..: 2128 2128 2463 2463 2463 2463 2969 4792 4792 4792 ...
 $ city                : Factor w/ 56 levels "","2ND FL","B",..: 13 13 13 13 13 13 13 13 13 13 ...
 $ state               : Factor w/ 4 levels "","MA","ME","NY": 2 2 2 2 2 2 2 2 2 2 ...
 $ zip                 : Factor w/ 54 levels "","00000","00000-0000",..: 26 26 28 28 28 28 26 6 6 6 ...
 $ frisked             : Factor w/ 2 levels "","Y": 1 1 2 2 2 2 2 2 2 2 ...
 $ searchperson        : Factor w/ 2 levels "","Y": 1 1 2 2 2 2 2 2 2 2 ...
 $ searchvehicle       : Factor w/ 2 levels "","Y": 1 1 1 1 1 1 2 1 1 1 ...
 $ summonsissued       : Factor w/ 2 levels "","Y": 1 1 1 1 1 1 1 1 1 1 ...
 $ stop_duration       : Factor w/ 11 levels "","Fifteen to Twenty Minutes",..: 3 3 11 11 11 11 8 11 11 11 ...
 $ circumstance        : Factor w/ 3 levels "Encountered",..: 1 1 3 3 3 3 3 2 2 2 ...
 $ basis               : Factor w/ 4 levels "Encounter","Intel",..: 1 1 3 3 3 3 4 4 4 4 ...
 $ vehicle_year        : int  NA NA 2010 2010 2010 2010 2014 NA NA NA ...
 $ vehicle_state       : Factor w/ 36 levels ""," ","AB","AL",..: 1 1 14 14 14 14 14 1 1 1 ...
 $ vehicle_make        : Factor w/ 43 levels "","ACURA","AUDI",..: 1 1 15 15 15 15 15 1 1 1 ...
 $ vehicle_model       : Factor w/ 175 levels "","3 SERIES",..: 1 1 17 17 17 17 17 1 1 1 ...
 $ vehicle_color       : Factor w/ 17 levels "","BLACK ","BLUE",..: 1 1 7 7 7 7 16 1 1 1 ...
 $ vehicle_style       : Factor w/ 3 levels "","PASSENGER CAR",..: 1 1 2 2 2 2 2 1 1 1 ...
 $ vehicle_type        : Factor w/ 13 levels "","Bus/Passenger Van",..: 1 1 10 10 10 10 10 1 1 1 ...
 $ contact_reason      : Factor w/ 7442 levels "","- CONFIRMED/ACTIVE MOZART ASSOC IN THE BRIC DATABASE\n\n- TSTOP, XXX SUMMONSED FOR OP AFTER SUSPENSION\n\n- XXX"| __truncated__,..: 3357 3357 6768 6768 6768 6768 1 389 389 389 ...

Clean Data

Get Rid of NA’s
Factor Out Data Variables

Can’t delete NA’s for this data set so the values with many NA’s were factored with a U to signify it’s a missing value.

FIO15_Records$sex <- factor(FIO15_Records$sex)
levels(FIO15_Records) <- c("Female", "Male", "Transgender Female to Male", "Transgender Male to Female", "Unknown", "Other","Not Specified")
FIO15_Records$race <- factor(FIO15_Records$race)
levels(FIO15_Records$race) <- c("Asian","Black","Native American / Alaskan Native","Native Hawaiian / Other Pacific Islander", "Unknown", "White", "Not Specified", "Other")
FIO15_Records$build <- factor(FIO15_Records$build, levels = c("Medium", "Thin", "Small", "Heavy", "Stocky", "Other", "Not Specified"), ordered = TRUE)
levels(FIO15_Records$build) <- c(levels(FIO15_Records$build),"U")
FIO15_Records$build[is.na(FIO15_Records$build)]<- "U"
FIO15_Records$hair_style <- factor(FIO15_Records$hair_style, levels = c("Short", "Braids","Long", "Bald", "Straight", "Curly/Wavy", "Not Specified", "Other"), ordered = TRUE)
levels(FIO15_Records$hair_style) <- c(levels(FIO15_Records$hair_style),"U")
FIO15_Records$hair_style[is.na(FIO15_Records$hair_style)]<- "U"
FIO15_Records$complexion <- factor(FIO15_Records$complexion, levels = c("Medium", "Light","Dark", "Medium Brown", "Dark Brown",  "Other","Specified"), ordered = TRUE)
levels(FIO15_Records$complexion) <- c(levels(FIO15_Records$complexion),"U")
FIO15_Records$complexion[is.na(FIO15_Records$complexion)]<- "U"
FIO15_Records$ethnicity <- factor(FIO15_Records$ethnicity)
levels(FIO15_Records$ethnicity) <- c("Hispanic Origin", "Not of Hispanic Origin", "Unknown", "Not Specified")
FIO15_Records$otherclothing <- factor(FIO15_Records$otherclothing, levels = c("WHITE TSHIRT, BLUE JEANS", "BLACK HOODIE, BLUE JEANS", "WHITE T-SHIRT, BLUE JEANS", "BLACK SHIRT, BLUE JEANS", "OTHER"), ordered = TRUE)
levels(FIO15_Records$otherclothing) <- c(levels(FIO15_Records$otherclothing),"U")
FIO15_Records$otherclothing[is.na(FIO15_Records$otherclothing)]<- "U"
FIO15_Records$city <- factor(FIO15_Records$city, levels = c("BSTN", "BOSTON", "DORCHESTER", "ROXBURY", "JAMAICA PLAIN","OTHER","NOT SPECIFIED"), ordered = TRUE)
levels(FIO15_Records$city) <- c(levels(FIO15_Records$city),"U")
FIO15_Records$city[is.na(FIO15_Records$city)]<- "U"
FIO15_Records$state <- factor(FIO15_Records$state)
levels(FIO15_Records$state) <- c( "MA", "ME","NY", "OTHER", "NOT SPECIFIED")
FIO15_Records$frisked <- factor(FIO15_Records$frisked)
levels(FIO15_Records$frisked) <- c("N", "Y")
FIO15_Records$searchperson <- factor(FIO15_Records$searchperson)
levels(FIO15_Records$searchperson) <- c("N", "Y")
FIO15_Records$searchvehicle <- factor(FIO15_Records$searchvehicle)
levels(FIO15_Records$searchvehicle) <- c("N", "Y")
FIO15_Records$summonsissued <- factor(FIO15_Records$summonsissued)
levels(FIO15_Records$summonsissued) <- c("N", "Y")
FIO15_Records$stop_duration <- factor(FIO15_Records$stop_duration, levels = c(" Five to Ten Minutes", "Less Than Five Minutes", "Ten to Fifteen Minutes", "Fifteen to Twenty Minutes", "Thirty to Forty-Five Minutes", "Other", "Not Specified"), ordered = TRUE)
levels(FIO15_Records$stop_duration)
[1] " Five to Ten Minutes"         "Less Than Five Minutes"       "Ten to Fifteen Minutes"       "Fifteen to Twenty Minutes"    "Thirty to Forty-Five Minutes"
[6] "Other"                        "Not Specified"               
FIO15_Records$vehicle_state  <- factor(FIO15_Records$vehicle_state, levels = c("MA","ME","NY","RI","NH","Other","Not Specified"), ordered = TRUE)
levels(FIO15_Records$vehicle_state) <- c(levels(FIO15_Records$vehicle_state),"U")
FIO15_Records$vehicle_state[is.na(FIO15_Records$vehicle_state)]<- "U"
FIO15_Records$vehicle_make  <- factor(FIO15_Records$vehicle_make, levels = c("HONDA", "NISSAN","TOYOTA", "FORD","CHEVROLET", "OTHER","NOT SPECIFIED"), ordered = TRUE)
levels(FIO15_Records$vehicle_make) <- c(levels(FIO15_Records$vehicle_make),"U")
FIO15_Records$vehicle_make[is.na(FIO15_Records$vehicle_make)]<- "U"
FIO15_Records$vehicle_model <- factor(FIO15_Records$vehicle_model, levels = c("ACCORD", "ALTIMA", "CIVIC","CAMRY","OTHER", "NOT SPECFIED"), ordered = TRUE)
levels(FIO15_Records$vehicle_model) <- c(levels(FIO15_Records$vehicle_model),"U")
FIO15_Records$vehicle_model[is.na(FIO15_Records$vehicle_model)]<- "U"
FIO15_Records$vehicle_color <- factor(FIO15_Records$vehicle_color, levels = c("GRAY","BLACK", "WHITE","BLUE", "RED","OTHER", "NOT SPECIFIED"), ordered = TRUE)
levels(FIO15_Records$vehicle_color) <- c(levels(FIO15_Records$vehicle_color),"U")
FIO15_Records$vehicle_color[is.na(FIO15_Records$vehicle_color)]<- "U"
FIO15_Records$vehicle_style <- factor(FIO15_Records$vehicle_style)
levels(FIO15_Records$vehicle_style) <- c("PASSENGER CAR", "PICKUP", "OTHER", "NOT SPECIFIED")
FIO15_Records$vehicle_type <- factor(FIO15_Records$vehicle_type, levels = c("Sedan","SUV or Utility Van","Compact","Other","Station Wagon","Not Specified"), ordered = TRUE)
levels(FIO15_Records$vehicle_type) <- c(levels(FIO15_Records$vehicle_type),"U")
FIO15_Records$vehicle_type[is.na(FIO15_Records$vehicle_type)]<- "U"
FIO15_Records$contact_reason <- factor(FIO15_Records$contact_reason, levels = c("PROBATION CHECK", "INVESTIGATIVE OPERATION", "TRAFFIC STOP", "VALS", "DRUG INVEST", "OTHER","NOT SPECIFIED"), ordered = TRUE)
levels(FIO15_Records$contact_reason) <- c(levels(FIO15_Records$contact_reason),"U")
FIO15_Records$contact_reason[is.na(FIO15_Records$contact_reason)]<- "U"
 
Check Factors
levels(FIO15_Records$sex)
[1] ""                           "Female"                     "Male"                       "Transgender Female to Male" "Transgender Male to Female"
[6] "Unknown"                   
levels(FIO15_Records$race)
[1] "Asian"                                    "Black"                                    "Native American / Alaskan Native"        
[4] "Native Hawaiian / Other Pacific Islander" "Unknown"                                  "White"                                   
[7] "Not Specified"                            "Other"                                   
levels(FIO15_Records$build)
[1] "Medium"        "Thin"          "Small"         "Heavy"         "Stocky"        "Other"         "Not Specified" "U"            
levels(FIO15_Records$hair_style)
[1] "Short"         "Braids"        "Long"          "Bald"          "Straight"      "Curly/Wavy"    "Not Specified" "Other"         "U"            
levels(FIO15_Records$complexion)
[1] "Medium"       "Light"        "Dark"         "Medium Brown" "Dark Brown"   "Other"        "Specified"    "U"           
levels(FIO15_Records$ethnicity)
[1] "Hispanic Origin"        "Not of Hispanic Origin" "Unknown"                "Not Specified"         
levels(FIO15_Records$otherclothing)
[1] "WHITE TSHIRT, BLUE JEANS"  "BLACK HOODIE, BLUE JEANS"  "WHITE T-SHIRT, BLUE JEANS" "BLACK SHIRT, BLUE JEANS"   "OTHER"                    
[6] "U"                        
levels(FIO15_Records$city)
[1] "BSTN"          "BOSTON"        "DORCHESTER"    "ROXBURY"       "JAMAICA PLAIN" "OTHER"         "NOT SPECIFIED" "U"            
levels(FIO15_Records$state) 
[1] "MA"            "ME"            "NY"            "OTHER"         "NOT SPECIFIED"
levels(FIO15_Records$frisked) 
[1] "N" "Y"
levels(FIO15_Records$searchperson) 
[1] "N" "Y"
levels(FIO15_Records$searchvehicle) 
[1] "N" "Y"
levels(FIO15_Records$summonsissued) 
[1] "N" "Y"
levels(FIO15_Records$stop_duration)
[1] " Five to Ten Minutes"         "Less Than Five Minutes"       "Ten to Fifteen Minutes"       "Fifteen to Twenty Minutes"    "Thirty to Forty-Five Minutes"
[6] "Other"                        "Not Specified"               
levels(FIO15_Records$vehicle_state)
[1] "MA"            "ME"            "NY"            "RI"            "NH"            "Other"         "Not Specified" "U"            
levels(FIO15_Records$vehicle_make)
[1] "HONDA"         "NISSAN"        "TOYOTA"        "FORD"          "CHEVROLET"     "OTHER"         "NOT SPECIFIED" "U"            
levels(FIO15_Records$vehicle_model)
[1] "ACCORD"       "ALTIMA"       "CIVIC"        "CAMRY"        "OTHER"        "NOT SPECFIED" "U"           
levels(FIO15_Records$vehicle_color)
[1] "GRAY"          "BLACK"         "WHITE"         "BLUE"          "RED"           "OTHER"         "NOT SPECIFIED" "U"            
levels(FIO15_Records$vehicle_style) 
[1] "PASSENGER CAR" "PICKUP"        "OTHER"         "NOT SPECIFIED"
levels(FIO15_Records$vehicle_type)
[1] "Sedan"              "SUV or Utility Van" "Compact"            "Other"              "Station Wagon"      "Not Specified"      "U"                 
levels(FIO15_Records$contact_reason)
[1] "PROBATION CHECK"         "INVESTIGATIVE OPERATION" "TRAFFIC STOP"            "VALS"                    "DRUG INVEST"             "OTHER"                  
[7] "NOT SPECIFIED"           "U"                      
Delete NA’s

Can’t delete NA’s in merged data sets therefore NA’s had to be factored into a U

newFIO15_Records = FIO15_Records
newFIO15_Records = newFIO15_Records[!is.na(newFIO15_Records$age),]
newFIO15_Records = newFIO15_Records[!is.na(newFIO15_Records$stop_duration),]
newFIO15_Records = newFIO15_Records[!(newFIO15_Records$zip == ""),]
newFIO15_Records$sex = droplevels(newFIO15_Records$sex)
Check Data For Changes
summary(newFIO15_Records)
        fc_num         recnum                          contact_date.x                         sex                                             race           age      
 F150008600:   9   Min.   :1e+08   2015-09-28 14:00:00.0000000:   9   Female                    : 309   Native American / Alaskan Native        :1746   Min.   : 0.0  
 F150011337:   9   1st Qu.:1e+08   2015-10-27 22:30:00.0000000:   9   Male                      :2404   Not Specified                           : 827   1st Qu.:21.0  
 F150009044:   7   Median :1e+08   2015-12-23 02:03:00.0000000:   9   Transgender Male to Female:   1   White                                   : 125   Median :26.0  
 F150009420:   7   Mean   :1e+08   2015-10-13 18:10:00.0000000:   8   Unknown                   :   1   Black                                   :  10   Mean   :28.7  
 F150009448:   7   3rd Qu.:1e+08   2015-11-06 00:00:00.0000000:   8                                     Native Hawaiian / Other Pacific Islander:   4   3rd Qu.:34.0  
 F150011392:   7   Max.   :1e+08   2015-12-11 18:00:00.0000000:   8                                     Unknown                                 :   3   Max.   :83.0  
 (Other)   :2669                   (Other)                    :2664                                     (Other)                                 :   0                 
     build        hair_style          complexion                   ethnicity                      otherclothing                      contact_date.y contact_officer
 Medium :971   U       :1375   U           :960   Hispanic Origin       :1580   WHITE TSHIRT, BLUE JEANS :   3   2015-09-28 14:00:00.0000000:   9   092675 : 103   
 U      :596   Short   : 902   Medium      :511   Not of Hispanic Origin: 209   BLACK HOODIE, BLUE JEANS :   8   2015-10-27 22:30:00.0000000:   9   102400 :  94   
 Thin   :522   Braids  : 164   Light       :492   Unknown               : 838   WHITE T-SHIRT, BLUE JEANS:   4   2015-12-23 02:03:00.0000000:   9   107106 :  85   
 Small  :303   Long    : 149   Medium Brown:339   Not Specified         :  88   BLACK SHIRT, BLUE JEANS  :   2   2015-10-13 18:10:00.0000000:   8   011817 :  63   
 Heavy  :203   Straight:  66   Dark Brown  :210                                 OTHER                    :   0   2015-11-06 00:00:00.0000000:   8   116945 :  63   
 Stocky :120   Bald    :  59   Dark        :198                                 U                        :2698   2015-12-11 18:00:00.0000000:   8   010804 :  40   
 (Other):  0   (Other) :   0   (Other)     :  5                                                                  (Other)                    :2664   (Other):2267   
            contact_officer_name   supervisor                supervisor_name                 streetaddr              city                state           zip      
 DERVAN,EDWARD P.     : 103      Min.   : 7358   HYNES, JOHN         : 284   618 SHAWMUT AVE      :  47   BSTN         :2463   MA           :   7   02119  : 344  
 KELLY,BRENDAN W.     :  94      1st Qu.: 9034   VICKERS, MARK       : 212   279 CENTRE ST        :  36   ROXBURY      :  93   ME           :2708   02124  : 312  
 O'LOUGHLIN,JAMES     :  85      Median :10801   RYAN, GARY          : 147   159 CABOT ST         :  20   DORCHESTER   :  54   NY           :   0   02118  : 219  
 EZEKIEL,JASON M      :  63      Mean   :18504   VICKERS, MARK 008740: 135   29 MOUNT PLEASANT AVE:  17   U            :  46   OTHER        :   0   02121  : 195  
 KENNEDY,CHRISTOPHER M:  53      3rd Qu.:11620   FORD, JOHN          : 133   70 ANNUNCIATION RD   :  17   BOSTON       :  44   NOT SPECIFIED:   0   02130  : 194  
 MCMANUS,BRIAN B.     :  40      Max.   :99724   BICKERTON, DEAN     : 101   280 CENTRE ST        :  16   JAMAICA PLAIN:  15                        02125  : 179  
 (Other)              :2277                      (Other)             :1703   (Other)              :2562   (Other)      :   0                        (Other):1272  
 frisked  searchperson searchvehicle summonsissued                      stop_duration      circumstance                   basis       vehicle_year  vehicle_state 
 N:1616   N:2215       N:2409        N:2561         Five to Ten Minutes        :  0   Encountered: 596   Encounter           : 562   Min.   :   3   U      :1849  
 Y:1099   Y: 500       Y: 306        Y: 154        Less Than Five Minutes      :819   Observed   : 448   Intel               : 315   1st Qu.:2002   MA     : 811  
                                                   Ten to Fifteen Minutes      :949   Stopped    :1671   Probable Cause      :1136   Median :2006   ME     :  28  
                                                   Fifteen to Twenty Minutes   :776                      Reasonable Suspicion: 702   Mean   :2000   RI     :  11  
                                                   Thirty to Forty-Five Minutes:171                                                  3rd Qu.:2012   NY     :   8  
                                                   Other                       :  0                                                  Max.   :2016   NH     :   8  
                                                   Not Specified               :  0                                                  NA's   :1849   (Other):   0  
    vehicle_make       vehicle_model  vehicle_color        vehicle_style              vehicle_type                  contact_reason
 U        :2258   ACCORD      :  80   U      :2143   PASSENGER CAR:1885   Sedan             : 564   U                      :2690  
 HONDA    : 127   ALTIMA      :  44   GRAY   : 229   PICKUP       : 813   SUV or Utility Van: 165   INVESTIGATIVE OPERATION:  10  
 NISSAN   : 105   CIVIC       :  39   WHITE  : 151   OTHER        :  17   Compact           :  37   TRAFFIC STOP           :   6  
 FORD     :  89   CAMRY       :  38   BLUE   : 110   NOT SPECIFIED:   0   Other             :  19   DRUG INVEST            :   5  
 CHEVROLET:  69   OTHER       : 106   RED    :  82                        Station Wagon     :  13   PROBATION CHECK        :   2  
 TOYOTA   :  67   NOT SPECFIED:   0   BLACK  :   0                        Not Specified     :   0   VALS                   :   2  
 (Other)  :   0   U           :2408   (Other):   0                        U                 :1917   (Other)                :   0  

Map

#library(ggmap)
#library(dplyr)
#X = mutate_geocode(FI11_15[1:1000,], ADDRESS)
FI11_15 = read.csv("FI11_15.csv")
FI11_15 = FI11_15[,-1]
street_address = read.csv("Live_Street_Address_Management_SAM_Addresses.csv") 
colnames(street_address)[1] = "X"
# geocoding street address.
FI11_15 = FI11_15[complete.cases(FI11_15),]
dim(FI11_15[complete.cases(FI11_15),])
[1] 7317   44
#street_address = Live_Street_Address_Management_SAM_Addresses
street_address = street_address[,colnames(street_address) %in% c('X','Y','STREET_ID')]
street_address = unique(street_address)
street_address = street_address[street_address$STREET_ID %in% FI11_15$STREET_ID,]
street_address = street_address[!duplicated(street_address$STREET_ID),]
data = merge(FI11_15,street_address,by="STREET_ID")
colnames(data)[45] = "long"
colnames(data)[46] = "lat"
summary(data)
   STREET_ID         X.x            SEQ_NUM            FIO_ID            SEX                     LOCATION         DIST         DIST_ID      
 Min.   :  19   Min.   :    55   Min.   : 696428   Min.   :511191   FEMALE : 484   70 ANNUNCIATION RD:  33   B2     :3015   Min.   : 1.000  
 1st Qu.: 916   1st Qu.: 37744   1st Qu.: 880079   1st Qu.:563833   MALE   :5383   58 ANNUNCIATION RD:  24   C11    :1484   1st Qu.: 3.000  
 Median :1766   Median : 79050   Median : 921137   Median :604660   UNKNOWN:   1   131 HAROLD ST     :  20   B3     : 843   Median : 3.000  
 Mean   :1956   Mean   : 76757   Mean   : 913893   Mean   :600888                   BOWER ST         :  18   D4     : 130   Mean   : 4.086  
 3rd Qu.:2929   3rd Qu.:113410   3rd Qu.: 955850   3rd Qu.:638947                  1352 DORCHESTER AV:  18   E13    :  82   3rd Qu.: 5.000  
 Max.   :5059   Max.   :152225   Max.   :1052504   Max.   :666971                  500 GENEVA AV     :  17   A1     :  64   Max.   :23.000  
                                                                                   (Other)           :5738   (Other): 250                   
                   FIO_DATE                      FIO_TIME        PRIORS                               DESCRIPTION                       CLOTHING   
 05/23/2014 12:00:00 AM:  30   05/23/2014 12:00:00 AM:  30   NO     : 503   B(Black)                        :5124   black jacket, blue jeans:   5  
 09/03/2014 12:00:00 AM:  29   09/03/2014 12:00:00 AM:  29   U      : 409   W(White)                        : 358   BLACK JACKET, BLUE JEANS:  30  
 06/01/2014 12:00:00 AM:  27   06/01/2014 12:00:00 AM:  27   UNKNOWN:  38   NO DATA ENTERED                 : 184   BLK JACKET, BLUE JEANS  :  22  
 06/11/2014 12:00:00 AM:  26   06/11/2014 12:00:00 AM:  26   YES    :4918   H(Hispanic)                     : 169   U                       :5811  
 05/16/2014 12:00:00 AM:  22   05/16/2014 12:00:00 AM:  22                  A(Asian or Pacific Islander)    :  20   UNKNOWN                 :   0  
 05/22/2015 12:00:00 AM:  22   05/22/2015 12:00:00 AM:  22                  M(Middle Eastern or East Indian):   8                                  
 (Other)               :5712   (Other)               :5712                  (Other)                         :   5                                  
           COMPLEXION     FIOFS_TYPE   TERRORISM    SEARCH                      BASIS                       STOP_REASONS               FIOFS_REASONS  OUTCOME  
 Med            :3298   IO     :2214   NO :5867   OTHER: 359   CONSENT SEARCH      :4725   CITIZEN ASSIST         :1018   INVESTIGATE, PERSON :3619   F :5436  
 Dark           :1270   IOF    :1396   YES:   1   P    :4894   OTHER               : 399   CRIMINAL VIOLATION     :   3   VAL                 :1135   FO: 107  
 Light          : 759   O      : 813              V    : 396   PROBABLE CAUSE      :  47   INVESTIGATIVE          :  18   INVESTIGATE, MV     : 227   O :  48  
 NO DATA ENTERED: 314   IOFS   : 561              VP   : 219   REASONABLE SUSPICION: 697   MOTOR VEHICLE VIOLATION:2639   WARRANT ARREST      : 131   S :  71  
 Brown          : 181   OF     : 459                                                       OTHER(SPECIFY)         : 766   TRESPASSING         : 107   SF:  69  
 Fair           :  25   I      : 143                                                       RADIO CALL             :1004   DRUGS, INVESTIGATION:  97   U : 137  
 (Other)        :  21   (Other): 282                                                       UNKNOWN                : 420   (Other)             : 552            
            VEH_MAKE              VEH_COLOR    VEH_MODEL       VEH_OCCUPANT            VEH_STATE      OFFICER_ID               SUPERVISOR    OFF_DIST_ID     
 NO DATA ENTERED:3577   NO DATA ENTERED:3650   4 DR :  25   DRIVER   :3807   NO DATA ENTERED:3561   Min.   :     1   JOHN J FORD    :3807   Min.   :   1.00  
 HONDA          : 335   GREY           : 540   4DR  : 508   PASSENGER:1125   MA             :2101   1st Qu.: 89996   PAUL R DONOVAN : 936   1st Qu.:   3.00  
 NISSAN         : 274   BLACK          : 486   sedan:  58   UNKNOWN  : 936   New Hampshire  :  28   Median : 99722   TIMOTHY M HORAN:1125   Median :  16.00  
 FORD           : 197   WHITE          : 279   SEDAN: 266                    New York       :  24   Mean   : 91125                          Mean   :  36.01  
 ACURA          : 169   BLUE           : 239   SUV  : 103                    Maine          :  17   3rd Qu.:103611                          3rd Qu.:  16.00  
 CHEVROLET      : 165   RED            : 187   U    :4908                    Connecticut    :  15   Max.   :131283                          Max.   :9999.00  
 (Other)        :1151   (Other)        : 487                                 (Other)        : 122                                                            
    OFF_DIST                   OFFICER                    SUP_ENTRYDATE                LAST_UPDATETIME ETHNICITY                FIRST_INSERTTIME   ACTIVE_ID
 YVSF   :3209   EDWARD P.   DERVAN : 563   03/26/2012 12:00:00 AM:  57   10/02/2014 12:00:00 AM:  44   BNH: 971   10/02/2014 12:00:00 AM:  44    Min.   :1  
 B2     :1710   Taylor S.   Small  : 239   10/16/2012 12:00:00 AM:   3   03/19/2012 12:00:00 AM:  41   CV :1131   03/19/2012 12:00:00 AM:  41    1st Qu.:1  
 C11    : 651   John G Burrows     : 231   U                     :5808   05/26/2015 12:00:00 AM:  41   N/H:1251   05/26/2015 12:00:00 AM:  41    Median :1  
 B3     : 172   Brian W Johnson    : 207                                 10/09/2014 12:00:00 AM:  36   NH :2515   10/09/2014 12:00:00 AM:  36    Mean   :1  
 D14    :  46   Jean G Jean-Louis  : 189                                 07/29/2014 12:00:00 AM:  35              07/29/2014 12:00:00 AM:  35    3rd Qu.:1  
 C6     :  22   Philip   Bissonnett: 188                                 02/09/2014 12:00:00 AM:  34              02/09/2014 12:00:00 AM:  34    Max.   :1  
 (Other):  58   (Other)            :4251                                 (Other)               :5637              (Other)               :5637               
    RACE_ID                                    RACE_DESC                 FIO_DATE_CORRECTED AGE_AT_FIO_CORRECTED              CITY                       CAT      
 Min.   :   0.000   B(Black)                        :5124   05/23/2014 12:00:00 AM:  30     Min.   :-1.00        NO DATA ENTERED:3622   Investigation      :3875  
 1st Qu.:   2.000   W(White)                        : 358   09/03/2014 12:00:00 AM:  29     1st Qu.:21.00        Dorchester     :1120   Other              :1150  
 Median :   2.000   NO DATA ENTERED                 : 184   06/01/2014 12:00:00 AM:  27     Median :24.00        Roxbury        : 442   Quality of Life    : 336  
 Mean   :   8.905   H(Hispanic)                     : 169   06/11/2014 12:00:00 AM:  26     Mean   :26.01        OTHER          : 199   Warrant and Firearm: 199  
 3rd Qu.:   2.000   A(Asian or Pacific Islander)    :  20   05/16/2014 12:00:00 AM:  22     3rd Qu.:29.00        Boston         : 155   Property           : 139  
 Max.   :9999.000   M(Middle Eastern or East Indian):   8   05/22/2015 12:00:00 AM:  22     Max.   :74.00        Mattapan       : 105   Sexnsual Offense   :  81  
                    (Other)                         :   5   (Other)               :5712                          (Other)        : 225   (Other)            :  88  
        DIST_IDNAME                                   ADDRESS          long             lat       
 Roxbury      :3015   70 ANNUNCIATION RD,Roxbury,BOSTON   :  33   Min.   :-71.18   Min.   :42.23  
 Dorchester   :1484   58 ANNUNCIATION RD,Roxbury,BOSTON   :  24   1st Qu.:-71.12   1st Qu.:42.29  
 Mattapan     : 843   131 HAROLD ST,Roxbury,BOSTON        :  20   Median :-71.09   Median :42.31  
 South End    : 130    BOWER ST,Roxbury,BOSTON            :  18   Mean   :-71.10   Mean   :42.32  
 Jamaica Plain:  82   1352 DORCHESTER AV,Dorchester,BOSTON:  18   3rd Qu.:-71.06   3rd Qu.:42.35  
 Downtown     :  64   500 GENEVA AV,Dorchester,BOSTON     :  17   Max.   :-71.00   Max.   :42.39  
 (Other)      : 250   (Other)                             :5738                                   
table(FI11_15$DIST)

  A1  A15   A7 Auto   B2   B3  BMP  C11   C6  D14   D4  DCU  E13  E18   E5 YVSF 
  71   26   23    2 3789 1048    9 1743   77   65  189    2  137   84   26   26 
# install the packages
if(!require(readr)) install.packages("readr")
Loading required package: readr
package <U+393C><U+3E31>readr<U+393C><U+3E32> was built under R version 3.5.1
if(!require(dplyr)) install.packages("dplyr")
Loading required package: dplyr
package <U+393C><U+3E31>dplyr<U+393C><U+3E32> was built under R version 3.5.1
Attaching package: <U+393C><U+3E31>dplyr<U+393C><U+3E32>

The following objects are masked from <U+393C><U+3E31>package:stats<U+393C><U+3E32>:

    filter, lag

The following objects are masked from <U+393C><U+3E31>package:base<U+393C><U+3E32>:

    intersect, setdiff, setequal, union
if(!require(DT)) install.packages("DT")
Loading required package: DT
package <U+393C><U+3E31>DT<U+393C><U+3E32> was built under R version 3.5.1
if(!require(ggrepel)) install.packages("ggrepel")
Loading required package: ggrepel
package <U+393C><U+3E31>ggrepel<U+393C><U+3E32> was built under R version 3.5.1Loading required package: ggplot2
package <U+393C><U+3E31>ggplot2<U+393C><U+3E32> was built under R version 3.5.1
if(!require(leaflet)) install.packages("leaflet")
Loading required package: leaflet
package <U+393C><U+3E31>leaflet<U+393C><U+3E32> was built under R version 3.5.1
library(rgdal)
package <U+393C><U+3E31>rgdal<U+393C><U+3E32> was built under R version 3.5.1Loading required package: sp
package <U+393C><U+3E31>sp<U+393C><U+3E32> was built under R version 3.5.1rgdal: version: 1.3-6, (SVN revision 773)
 Geospatial Data Abstraction Library extensions to R successfully loaded
 Loaded GDAL runtime: GDAL 2.2.3, released 2017/11/20
 Path to GDAL shared files: C:/Users/Aylin/Documents/R/win-library/3.5/rgdal/gdal
 GDAL binary built with GEOS: TRUE 
 Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
 Path to PROJ.4 shared files: C:/Users/Aylin/Documents/R/win-library/3.5/rgdal/proj
 Linking to sp version: 1.3-1 
library(raster)
package <U+393C><U+3E31>raster<U+393C><U+3E32> was built under R version 3.5.1
Attaching package: <U+393C><U+3E31>raster<U+393C><U+3E32>

The following object is masked from <U+393C><U+3E31>package:dplyr<U+393C><U+3E32>:

    select
library(htmlwidgets)
package <U+393C><U+3E31>htmlwidgets<U+393C><U+3E32> was built under R version 3.5.1
policeDistricts <- shapefile("C:\\Users\\Aylin\\Documents\\R Data Files\\Police_Districts\\Police_Districts.shp")
policeDistricts$NAME <-c('Charlestown','East Boston','Downtown','South Boston',
                         'South End','Brighton','Jamaica Plain','West Roxbury',
                         'Mattapan','Dorchester','Hyde Park','Roxbury')
policeDistricts$INCIDENTS = c(26, 23,71,77,189,65,137,26,1048,1743,84,3789)
# Display crime incident locations on the map using leaflet. 
# Click icons on the map to show incident details.
library(leaflet)
#data = FI11_15
data$popup <- paste("<b>Incident #: </b>", data$FIO_ID, "<br>",
                    "<b>Category: </b>", data$CAT,
                    "<br>", "<b>Reason: </b>", data$STOP_REASONS,
                    "<br>", "<b>Date: </b>", data$FIO_DATE,
                    "<br>", "<b>Time: </b>", data$FIO_TIME,
                    "<br>", "<b>PD district: </b>", data$OFF_DIST,
                    "<br>", "<b>Resolution: </b>", data$OUTCOME,
                    "<br>", "<b>Address: </b>", data$LOCATION,
                    "<br>", "<b>Longitude: </b>", data$long,
                    "<br>", "<b>Latitude: </b>", data$lat
)
bins <- c(0,50, 100, 500, 1000, 1500, 2000, 2500, 3000, 5000)
pal <- colorBin("Greens", domain = policeDistricts$INCIDENTS, bins = bins)
leaflet(data, width = "100%") %>% addTiles() %>%
     addTiles(group = "OSM (default)") %>%
     addProviderTiles(provider = "Esri.WorldStreetMap",group = "World StreetMap") %>%
    addProviderTiles(provider = "Esri.WorldImagery",group = "World Imagery") %>%
  
  # addProviderTiles(provider = "NASAGIBS.ViirsEarthAtNight2012",group = "Nighttime Imagery") %>%
 addMarkers(data = data,lng = ~long, lat = ~lat, popup = data$popup, clusterOptions = markerClusterOptions()) %>%
 addPolygons(data = policeDistricts, fill=TRUE,fillColor = ~pal(INCIDENTS),fillOpacity = 0.7 ,stroke = TRUE, color = "red", 
              popup = paste0("DISTRICT:",policeDistricts$NAME, "<br>", 
                             "DIST_ID:", policeDistricts$DISTRICT, "<br>",
                             "TOTAL INCIDENTS:",policeDistricts$INCIDENTS ))%>% 
  
addLayersControl(
    baseGroups = c("OSM (default)","World StreetMap", "World Imagery"),
    options = layersControlOptions(collapsed = FALSE)
    
  )

#a$width <- 874
#a$height <- 700
#saveWidget(a,"FI11-15Map.html", selfcontained = FALSE)   
 
LS0tDQp0aXRsZTogIlJlY2lkaXZpc20gaW4gQm9zdG9uIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMgRklPIFJlY29yZHMgMjAxNSANCg0KIyMjIElucHV0IGRhdGENCg0KQm90aCBGSU8gUmVjb3JkcyAyMDE1IDEgJiAyIHdlcmUgbWVyZ2VkIHRvZ2V0aGVyLg0KIA0KYGBge3J9DQpzZXR3ZCgifi9SIERhdGEgRmlsZXMiKSANCg0KRklPMTUgPC0gcmVhZC5jc3YoJ0ZJTyBSZWNvcmRzIDIwMTUgKE5ldyBSTVMpIC0gRmllbGRDb250YWN0X05hbWUgVGFibGUuY3N2JykNCg0KRklPMTVfMiA8LSByZWFkLmNzdignRklPIFJlY29yZHMgMjAxNSAoTmV3IFJNUykgLSBGaWVsZENvbnRhY3QgVGFibGUuY3N2JykNCg0KRklPMTVfUmVjb3JkcyA9IG1lcmdlKEZJTzE1LCBGSU8xNV8yLCBieSA9ICdmY19udW0nLGFsbCA9IFRSVUUpDQoNCmhlYWQoRklPMTVfUmVjb3JkcykNCg0KYGBgDQogDQojIyMgTG9vayBmb3IgTkEncyAmIE1pc3NpbmcgRGF0YQ0KDQpgYGB7cn0NCg0Kc3VtbWFyeShGSU8xNV9SZWNvcmRzKQ0KDQpgYGANCg0KYGBge3J9DQoNCnN0cihGSU8xNV9SZWNvcmRzKQ0KDQpgYGANCg0KIyMjIENsZWFuIERhdGENCg0KIyMjIyMgR2V0IFJpZCBvZiBOQSdzDQoNCiMjIyMjIyBGYWN0b3IgT3V0IERhdGEgVmFyaWFibGVzIA0KDQpDYW4ndCBkZWxldGUgTkEncyBmb3IgdGhpcyBkYXRhIHNldCBzbyB0aGUgdmFsdWVzIHdpdGggbWFueSBOQSdzIHdlcmUgZmFjdG9yZWQgd2l0aCBhIFUgdG8gc2lnbmlmeSBpdCdzIGEgbWlzc2luZyB2YWx1ZS4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KRklPMTVfUmVjb3JkcyRyYWNlIDwtIGZhY3RvcihGSU8xNV9SZWNvcmRzJHJhY2UpDQoNCmxldmVscyhGSU8xNV9SZWNvcmRzJHJhY2UpIDwtIGMoIkFzaWFuIiwiQmxhY2siLCJOYXRpdmUgQW1lcmljYW4gLyBBbGFza2FuIE5hdGl2ZSIsIk5hdGl2ZSBIYXdhaWlhbiAvIE90aGVyIFBhY2lmaWMgSXNsYW5kZXIiLCAiVW5rbm93biIsICJXaGl0ZSIsICJOb3QgU3BlY2lmaWVkIiwgIk90aGVyIikNCg0KDQpGSU8xNV9SZWNvcmRzJGJ1aWxkIDwtIGZhY3RvcihGSU8xNV9SZWNvcmRzJGJ1aWxkLCBsZXZlbHMgPSBjKCJNZWRpdW0iLCAiVGhpbiIsICJTbWFsbCIsICJIZWF2eSIsICJTdG9ja3kiLCAiT3RoZXIiLCAiTm90IFNwZWNpZmllZCIpLCBvcmRlcmVkID0gVFJVRSkNCg0KbGV2ZWxzKEZJTzE1X1JlY29yZHMkYnVpbGQpIDwtIGMobGV2ZWxzKEZJTzE1X1JlY29yZHMkYnVpbGQpLCJVIikNCkZJTzE1X1JlY29yZHMkYnVpbGRbaXMubmEoRklPMTVfUmVjb3JkcyRidWlsZCldPC0gIlUiDQoNCg0KYGBgDQoNCiMjIyMjIENoZWNrIEZhY3RvcnMgDQoNCmBgYHtyfQ0KDQpsZXZlbHMoRklPMTVfUmVjb3JkcyRyYWNlKQ0KDQpsZXZlbHMoRklPMTVfUmVjb3JkcyRidWlsZCkNCg0KYGBgDQoNCg0KIyMjIyMgRGVsZXRlIE5BJ3MNCg0KQ2FuJ3QgZGVsZXRlIE5BJ3MgaW4gbWVyZ2VkIGRhdGEgc2V0cyB0aGVyZWZvcmUgTkEncyBoYWQgdG8gYmUgZmFjdG9yZWQgaW50byBhIFUNCg0KYGBge3J9DQoNCm5ld0ZJTzE1X1JlY29yZHMgPSBGSU8xNV9SZWNvcmRzDQoNCm5ld0ZJTzE1X1JlY29yZHMgPSBuZXdGSU8xNV9SZWNvcmRzWyFpcy5uYShuZXdGSU8xNV9SZWNvcmRzJGFnZSksXQ0KDQpuZXdGSU8xNV9SZWNvcmRzID0gbmV3RklPMTVfUmVjb3Jkc1shKG5ld0ZJTzE1X1JlY29yZHMkemlwID09ICIiKSxdDQoNCm5ld0ZJTzE1X1JlY29yZHMkc2V4ID0gZHJvcGxldmVscyhuZXdGSU8xNV9SZWNvcmRzJHNleCkNCg0KYGBgDQoNCg0KIyMjIyMgQ2hlY2sgRGF0YSBGb3IgQ2hhbmdlcw0KDQpgYGB7cn0NCg0Kc3VtbWFyeShuZXdGSU8xNV9SZWNvcmRzKQ0KDQpgYGANCg0KIyMjIE1hcA0KDQpgYGB7cn0NCiNsaWJyYXJ5KGdnbWFwKQ0KI2xpYnJhcnkoZHBseXIpDQojWCA9IG11dGF0ZV9nZW9jb2RlKEZJMTFfMTVbMToxMDAwLF0sIEFERFJFU1MpDQoNCkZJMTFfMTUgPSByZWFkLmNzdigiRkkxMV8xNS5jc3YiKQ0KRkkxMV8xNSA9IEZJMTFfMTVbLC0xXQ0Kc3RyZWV0X2FkZHJlc3MgPSByZWFkLmNzdigiTGl2ZV9TdHJlZXRfQWRkcmVzc19NYW5hZ2VtZW50X1NBTV9BZGRyZXNzZXMuY3N2IikgDQpjb2xuYW1lcyhzdHJlZXRfYWRkcmVzcylbMV0gPSAiWCINCiMgZ2VvY29kaW5nIHN0cmVldCBhZGRyZXNzLg0KRkkxMV8xNSA9IEZJMTFfMTVbY29tcGxldGUuY2FzZXMoRkkxMV8xNSksXQ0KZGltKEZJMTFfMTVbY29tcGxldGUuY2FzZXMoRkkxMV8xNSksXSkNCiNzdHJlZXRfYWRkcmVzcyA9IExpdmVfU3RyZWV0X0FkZHJlc3NfTWFuYWdlbWVudF9TQU1fQWRkcmVzc2VzDQpzdHJlZXRfYWRkcmVzcyA9IHN0cmVldF9hZGRyZXNzWyxjb2xuYW1lcyhzdHJlZXRfYWRkcmVzcykgJWluJSBjKCdYJywnWScsJ1NUUkVFVF9JRCcpXQ0Kc3RyZWV0X2FkZHJlc3MgPSB1bmlxdWUoc3RyZWV0X2FkZHJlc3MpDQpzdHJlZXRfYWRkcmVzcyA9IHN0cmVldF9hZGRyZXNzW3N0cmVldF9hZGRyZXNzJFNUUkVFVF9JRCAlaW4lIEZJMTFfMTUkU1RSRUVUX0lELF0NCnN0cmVldF9hZGRyZXNzID0gc3RyZWV0X2FkZHJlc3NbIWR1cGxpY2F0ZWQoc3RyZWV0X2FkZHJlc3MkU1RSRUVUX0lEKSxdDQpkYXRhID0gbWVyZ2UoRkkxMV8xNSxzdHJlZXRfYWRkcmVzcyxieT0iU1RSRUVUX0lEIikNCg0KY29sbmFtZXMoZGF0YSlbNDVdID0gImxvbmciDQpjb2xuYW1lcyhkYXRhKVs0Nl0gPSAibGF0Ig0Kc3VtbWFyeShkYXRhKQ0KdGFibGUoRkkxMV8xNSRESVNUKQ0KIyBpbnN0YWxsIHRoZSBwYWNrYWdlcw0KaWYoIXJlcXVpcmUocmVhZHIpKSBpbnN0YWxsLnBhY2thZ2VzKCJyZWFkciIpDQppZighcmVxdWlyZShkcGx5cikpIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikNCmlmKCFyZXF1aXJlKERUKSkgaW5zdGFsbC5wYWNrYWdlcygiRFQiKQ0KaWYoIXJlcXVpcmUoZ2dyZXBlbCkpIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQ0KaWYoIXJlcXVpcmUobGVhZmxldCkpIGluc3RhbGwucGFja2FnZXMoImxlYWZsZXQiKQ0KDQpsaWJyYXJ5KHJnZGFsKQ0KbGlicmFyeShyYXN0ZXIpDQpsaWJyYXJ5KGh0bWx3aWRnZXRzKQ0KDQpwb2xpY2VEaXN0cmljdHMgPC0gc2hhcGVmaWxlKCJDOlxcVXNlcnNcXEF5bGluXFxEb2N1bWVudHNcXFIgRGF0YSBGaWxlc1xcUG9saWNlX0Rpc3RyaWN0c1xcUG9saWNlX0Rpc3RyaWN0cy5zaHAiKQ0KcG9saWNlRGlzdHJpY3RzJE5BTUUgPC1jKCdDaGFybGVzdG93bicsJ0Vhc3QgQm9zdG9uJywnRG93bnRvd24nLCdTb3V0aCBCb3N0b24nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICdTb3V0aCBFbmQnLCdCcmlnaHRvbicsJ0phbWFpY2EgUGxhaW4nLCdXZXN0IFJveGJ1cnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICdNYXR0YXBhbicsJ0RvcmNoZXN0ZXInLCdIeWRlIFBhcmsnLCdSb3hidXJ5JykNCnBvbGljZURpc3RyaWN0cyRJTkNJREVOVFMgPSBjKDI2LCAyMyw3MSw3NywxODksNjUsMTM3LDI2LDEwNDgsMTc0Myw4NCwzNzg5KQ0KIyBEaXNwbGF5IGNyaW1lIGluY2lkZW50IGxvY2F0aW9ucyBvbiB0aGUgbWFwIHVzaW5nIGxlYWZsZXQuIA0KIyBDbGljayBpY29ucyBvbiB0aGUgbWFwIHRvIHNob3cgaW5jaWRlbnQgZGV0YWlscy4NCg0KbGlicmFyeShsZWFmbGV0KQ0KI2RhdGEgPSBGSTExXzE1DQpkYXRhJHBvcHVwIDwtIHBhc3RlKCI8Yj5JbmNpZGVudCAjOiA8L2I+IiwgZGF0YSRGSU9fSUQsICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgIjxiPkNhdGVnb3J5OiA8L2I+IiwgZGF0YSRDQVQsDQogICAgICAgICAgICAgICAgICAgICI8YnI+IiwgIjxiPlJlYXNvbjogPC9iPiIsIGRhdGEkU1RPUF9SRUFTT05TLA0KICAgICAgICAgICAgICAgICAgICAiPGJyPiIsICI8Yj5EYXRlOiA8L2I+IiwgZGF0YSRGSU9fREFURSwNCiAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+VGltZTogPC9iPiIsIGRhdGEkRklPX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICI8YnI+IiwgIjxiPlBEIGRpc3RyaWN0OiA8L2I+IiwgZGF0YSRPRkZfRElTVCwNCiAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+UmVzb2x1dGlvbjogPC9iPiIsIGRhdGEkT1VUQ09NRSwNCiAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+QWRkcmVzczogPC9iPiIsIGRhdGEkTE9DQVRJT04sDQogICAgICAgICAgICAgICAgICAgICI8YnI+IiwgIjxiPkxvbmdpdHVkZTogPC9iPiIsIGRhdGEkbG9uZywNCiAgICAgICAgICAgICAgICAgICAgIjxicj4iLCAiPGI+TGF0aXR1ZGU6IDwvYj4iLCBkYXRhJGxhdA0KKQ0KDQpiaW5zIDwtIGMoMCw1MCwgMTAwLCA1MDAsIDEwMDAsIDE1MDAsIDIwMDAsIDI1MDAsIDMwMDAsIDUwMDApDQpwYWwgPC0gY29sb3JCaW4oIkdyZWVucyIsIGRvbWFpbiA9IHBvbGljZURpc3RyaWN0cyRJTkNJREVOVFMsIGJpbnMgPSBiaW5zKQ0KDQpsZWFmbGV0KGRhdGEsIHdpZHRoID0gIjEwMCUiKSAlPiUgYWRkVGlsZXMoKSAlPiUNCiAgICAgYWRkVGlsZXMoZ3JvdXAgPSAiT1NNIChkZWZhdWx0KSIpICU+JQ0KICAgICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVyID0gIkVzcmkuV29ybGRTdHJlZXRNYXAiLGdyb3VwID0gIldvcmxkIFN0cmVldE1hcCIpICU+JQ0KICAgIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXIgPSAiRXNyaS5Xb3JsZEltYWdlcnkiLGdyb3VwID0gIldvcmxkIEltYWdlcnkiKSAlPiUNCiAgDQogICMgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlciA9ICJOQVNBR0lCUy5WaWlyc0VhcnRoQXROaWdodDIwMTIiLGdyb3VwID0gIk5pZ2h0dGltZSBJbWFnZXJ5IikgJT4lDQogYWRkTWFya2VycyhkYXRhID0gZGF0YSxsbmcgPSB+bG9uZywgbGF0ID0gfmxhdCwgcG9wdXAgPSBkYXRhJHBvcHVwLCBjbHVzdGVyT3B0aW9ucyA9IG1hcmtlckNsdXN0ZXJPcHRpb25zKCkpICU+JQ0KIGFkZFBvbHlnb25zKGRhdGEgPSBwb2xpY2VEaXN0cmljdHMsIGZpbGw9VFJVRSxmaWxsQ29sb3IgPSB+cGFsKElOQ0lERU5UUyksZmlsbE9wYWNpdHkgPSAwLjcgLHN0cm9rZSA9IFRSVUUsIGNvbG9yID0gInJlZCIsIA0KICAgICAgICAgICAgICBwb3B1cCA9IHBhc3RlMCgiRElTVFJJQ1Q6Iixwb2xpY2VEaXN0cmljdHMkTkFNRSwgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRJU1RfSUQ6IiwgcG9saWNlRGlzdHJpY3RzJERJU1RSSUNULCAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT1RBTCBJTkNJREVOVFM6Iixwb2xpY2VEaXN0cmljdHMkSU5DSURFTlRTICkpJT4lIA0KICANCmFkZExheWVyc0NvbnRyb2woDQogICAgYmFzZUdyb3VwcyA9IGMoIk9TTSAoZGVmYXVsdCkiLCJXb3JsZCBTdHJlZXRNYXAiLCAiV29ybGQgSW1hZ2VyeSIpLA0KICAgIG9wdGlvbnMgPSBsYXllcnNDb250cm9sT3B0aW9ucyhjb2xsYXBzZWQgPSBGQUxTRSkNCiAgICANCiAgKQ0KDQoNCiNhJHdpZHRoIDwtIDg3NA0KI2EkaGVpZ2h0IDwtIDcwMA0KDQojc2F2ZVdpZGdldChhLCJGSTExLTE1TWFwLmh0bWwiLCBzZWxmY29udGFpbmVkID0gRkFMU0UpICAgDQogDQoNCmBgYA0KDQo=